在开发一个项目的时候,总是会遇到版本回退和版本客制化的问题,糟糕的分支管理会使整个开发过程痛苦不堪。版本管理的挑战:
- 如何开发一个Feature分支,又不影响其他的Feature分支?
- 分支多了如何管理,时间就了每个分支是干什么的?
- 哪些分支已经合并并回了主干?
- 如何进行Release分支的管理?开始一个Release的时候如何冻结Feature,如何在Prepare Release 的时候,开发人员可以继续新功能的开发?
- 线上代码除bug了,如何快速修复?而且修复的代码包含到开发人员的分支以及下一个Release?
下面介绍一种常见的工作流程 git flow
git flow 的特色在于为不同的分支分配明确的角色,并定义了使用场景和用法。
git flow 常用的分支
- Master 分支
这个分支显示的是最近发布到生产环境的代码,最近发布的Release, 该分支只能从其他分支合并代码,不能在这个分支直接修改代码 - Develop 分支
这个分支是我们的主开发分支,包含所有发布到一下个Release代码 - Feature 分支
这个分支主要用来开发一个新的功能,一旦开发完成,我们会合并到Develop分支进行下一个Release - Release 分支
当需要发布一个新的Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,将其合并到Master和Develop分支 Hotfix 分支
当发现产线上出来一个bug后,我们需要创建一个Hotfix分支完成bug修复,测试完成后,将该分支合并到Master和Develop分支,所以Hotfix的改动会进入下一个Releasegit flow 操作实践
第一步: 创建一个develop分支,并把它推到服务器
1 | git branch develop |
develop 分支将包含项目的所有历史。开发者可以clone中央仓库,并为develop分支创建一个追踪分支。
1 | git clone ssh://...... |
第二步: 创建Feature分支
1 | git checkout -b Featurename develop |
注意: Feature 的父分支应该选择develop
第三步: Feature分支的功能开发完成后(edit 、state、commit),将其合并到develop分支
1 | git pull origin develop //确保develop分支拥有最新代码 |
注意:新开发的功能代码永远不能直接合并到master分支。
第四步:创建Release分支,做产品发布准备
1 | git checkout -b release develop |
这个分支专门用于发布前准备,包括一些清理工具、全面测试、文档的更新及准备工作。
第五步:测试通过后,就可以将Release分支上的内容合并到master和develop分支上。
1 | git checkout master |
注意: Release保持最新版本的代码,该分支扮演着开发和生产之间的一个缓冲。无论什么时候把一些东西合并到master分支,都需要打一个tag
1 | git tag -a v1.0.0 -m "版本v1.0.0" master |
第六步: 当产品线出现bug后
1 | git checkout -b hotfix master |
第七步:完成bug修复后,并通过测试,将hotfix分支上的内容合并到master/develop
1 | git checkout master |
第八步: 基于master分支,打tag
1 | git tag -a v1.0.0/fix master |
git flow 工具
- 安装
1 | brew install git-flow |
- 初始化
1 | git flow init |
这个命令会进行一些默认的配置,自动创建master、develop、feature、release、hotfix分支。当进行新功能开发的时候,可以
1 | git flow feature start Featurename |
完成开发后
1 | git flow feature finish Featurename |
该命令会将feature/Featurename 合并到develop分支,并删除feature分支。
- 当功能点都完成后,基于develop分支创建一个release分支
1 | git flow release start v1.0.0 |
注:当完成(finish)一个发布分支时,它会把release分支上的内容合并到master分支,同时合并回develop分支,打tag。之后我们只需要把master和tag都推到远程仓库就行。
- 当产线出现bug,需要紧急修复时。
1 | git flow hotfix start v1.0.0 |
完成bug修复后
1 | git flow hotfix finish v1.0.0 |
注:当完成(finish)一个修复分支时,它会把hotfix分支上的内容合并到master分支,同时合并回develop分支。